package com.Business;

import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;

import javax.ejb.Remote;

import com.Entity.*;

@Remote
public interface AdminSessionRemote {

	// CRUD Type Of User
	public boolean createTypeOfUser(TypeOfUser typeOfUser) throws RemoteException;

	public List<TypeOfUser> retrieveTypeOfUserList() throws RemoteException;

	public boolean updateTypeOfUser(TypeOfUser typeOfUser) throws RemoteException;

	public boolean deleteTypeOfUser(int typeOfUserID) throws RemoteException;

	
	
	// CRUD Department
	public boolean createDepartment(Department department) throws RemoteException;

	public List<Department> retrieveDepartmentList() throws RemoteException;

	public boolean updateDepartment(Department department) throws RemoteException;

	public boolean deleteDepartment(int departmentID) throws RemoteException;

	
	
	// CRUD User
	public boolean createUser(CompanyUser companyUser) throws RemoteException;

	public List<CompanyUser> retrieveUserList(int typeOfUserID) throws RemoteException;

	public boolean updateUser(CompanyUser companyUser) throws RemoteException;

	public boolean deleteUser(int userID) throws RemoteException;

	
	
	// CRUD Complaint Category
	public boolean createComplaintCategory(ComplaintCategory complaintCategory) throws RemoteException;

	public List<ComplaintCategory> retrieveComplaintCategoryList() throws RemoteException;

	public boolean updateComplaintCategory(ComplaintCategory complaintCategory) throws RemoteException;

	public boolean deleteComplaintCategory(int complaintCategoryID) throws RemoteException;

	
	
	// Manage Complaint
	public List<Complaint> retrieveComplaintList(int status) throws RemoteException;

	public boolean updateComplaintPriority(int complaintID, int priority) throws RemoteException;

	public boolean deleteComplaint(int complaintID) throws RemoteException;

	public boolean assignComplaintToTechnician(int complaintID, int technicianID) throws RemoteException;

	
	
	// CRUD Article Category
	public boolean createArticleCategory(ArticleCategory articleCategory) throws RemoteException;

	public List<ArticleCategory> retrieveArticleCategoryList() throws RemoteException;

	public boolean updateArticleCategory(ArticleCategory articleCategory) throws RemoteException;

	public boolean deleteArticleCategory(int articleCategoryID) throws RemoteException;

	
	
	// CRUD Article
	public List<Article> retrieveArticleList(int articleCategoryID) throws RemoteException;
	//CREATE, UPDATE, DELETE methods are in GenericSession

	
	
	// CRUD FAQ
	public boolean createFaq(Faq faq) throws RemoteException;

	public List<Faq> retrieveFaqList() throws RemoteException;

	public boolean updateFaq(Faq faq) throws RemoteException;

	public boolean deleteFaq(int faqID) throws RemoteException;

	
	
	// Manage Feedback
	public List<Feedback> retrieveFeedbackList(int status) throws RemoteException;

	public Feedback readFeedback(int feedbackID) throws RemoteException;
	
	public boolean replyFeedback(int feedbackID) throws RemoteException;//Get email of companyUser to send mail

	
	
	// Generate Report
	public List<Complaint> retrieveComplaintListSummary(Date fromLodgingdDate, Date toLodgingDate) throws RemoteException;//For Summary Report

	// -----------To be continued--------------------

}
